<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>pg_ctl</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="REFENTRY">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="app-pgcontroldata.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="app-pgcontroldata.html">快退</a></td><td width="60%" align="center" valign="bottom"></td><td width="10%" align="right" valign="top"><a href="app-pgresetxlog.html">快进</a></td><td width="10%" align="right" valign="top"><a href="app-pgresetxlog.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<h1><a name="APP-PG-CTL"></a><span class="APPLICATION">pg_ctl</span></h1>
<div class="REFNAMEDIV"><a name="AEN60458"></a><h2>名称</h2>pg_ctl&nbsp;--&nbsp;启动、停止、重启 PostgreSQL</div>
<a name="AEN60462"></a>
<div class="REFSYNOPSISDIV"><a name="AEN60464"></a><h2>语法</h2>
<p><tt class="COMMAND">pg_ctl</tt>  start  [-w] [-s] [-D <tt class="REPLACEABLE"><i>datadir</i></tt>] [-l <tt class="REPLACEABLE"><i>filename</i></tt>] [-o <tt class="REPLACEABLE"><i>options</i></tt>] [-p <tt class="REPLACEABLE"><i>path</i></tt>]<br><tt class="COMMAND">pg_ctl</tt>  stop  [-W] [-s] [-D <tt class="REPLACEABLE"><i>datadir</i></tt>] [-m s[mart] | f[ast] | i[mmediate] ]<br><tt class="COMMAND">pg_ctl</tt>  restart  [-w] [-s] [-D <tt class="REPLACEABLE"><i>datadir</i></tt>] [-m s[mart] | f[ast] | i[mmediate] ] [-o <tt class="REPLACEABLE"><i>options</i></tt>]<br><tt class="COMMAND">pg_ctl</tt>  reload  [-s] [-D <tt class="REPLACEABLE"><i>datadir</i></tt>]<br><tt class="COMMAND">pg_ctl</tt>  status  [-D <tt class="REPLACEABLE"><i>datadir</i></tt>]<br><tt class="COMMAND">pg_ctl</tt>  kill  [<tt class="REPLACEABLE"><i>signal_name</i></tt>] [<tt class="REPLACEABLE"><i>process_id</i></tt>]<br><tt class="COMMAND">pg_ctl</tt>  register  [-N <tt class="REPLACEABLE"><i>servicename</i></tt>] [-U <tt class="REPLACEABLE"><i>username</i></tt>] [-P <tt class="REPLACEABLE"><i>password</i></tt>] [-D <tt class="REPLACEABLE"><i>datadir</i></tt>] [-w] [-o <tt class="REPLACEABLE"><i>options</i></tt>]<br><tt class="COMMAND">pg_ctl</tt>  unregister  [-N <tt class="REPLACEABLE"><i>servicename</i></tt>]</p>
</div>
<div class="REFSECT1"><a name="APP-PG-CTL-DESCRIPTION"></a><h2>描述</h2>
<p><span class="APPLICATION">pg_ctl</span> 用于启动、停止、重启 PostgreSQL 后端服务器(<a href="app-postgres.html"><span class="APPLICATION">postgres</span></a>)，或者显示一个运行着的服务器的状态。尽管可以手动启动服务器，但是 <span class="APPLICATION">pg_ctl</span> 封装了重新定向日志输出，与终端和进程组合理分离，以及另外提供了一个选项用于有控制的关闭。</p>
<p>在 <tt class="OPTION">start</tt> 模式里会启动一个新的服务器。服务器是在后台启动的，标准输入被附着到了 <tt class="FILENAME">/dev/null</tt> 上。如果使用了 <tt class="OPTION">-l</tt> ，那么标准输出和标准错误将被定向到一个日志文件，要么就是重定向到 <span class="APPLICATION">pg_ctl</span> 的标准输出(而不是标准错误)。如果没有选定日志文件，<span class="APPLICATION">pg_ctl</span> 的标准输出应该重定向到一个文件或者用管道输出到类似 <span class="APPLICATION">rotatelogs</span> 这样的日志滚动程序，否则，<tt class="COMMAND">postgres</tt> 将把它的输出写到控制终端(在后台)并且将不会脱离 shell 的进程组。</p>
<p>在 <tt class="OPTION">stop</tt> 模式下，那个正在特定数据目录运行的服务器将被关闭。你可以用 <tt class="OPTION">-m</tt> 选项选择三种不同的关闭模式："Smart"模式等待所有客户端中断连接，这是缺省。"Fast"模式并不等待客户端中断连接，所有活跃事务都被回滚并且客户端都被强制断开。"Immediate"模式将在没有干净关闭的情况下强行退出。这么做将导致在重新启动的时候的恢复。</p>
<p><tt class="OPTION">restart</tt> 实际上是先执行一个停止，然后紧跟一个启动。它允许变换 <tt class="COMMAND">postgres</tt> 的命令行选项。</p>
<p><tt class="OPTION">reload</tt> 模式简单地给 <tt class="COMMAND">postgres</tt> 发送一个 <span class="SYSTEMITEM">SIGHUP</span> 信号，导致它重新读取配置文件(<tt class="FILENAME">postgresql.conf</tt>, <tt class="FILENAME">pg_hba.conf</tt> 等)，这样就允许修改配置文件选项而不用重启系统即可生效。</p>
<p><tt class="OPTION">status</tt> 模式监查一个服务器是否在指定的数据目录运行，如果是，那么显示其 PID 和调用它的命令行选项。</p>
<p><tt class="OPTION">kill</tt> 模式允许你给一个指定的进程发送信号。这个功能对 Microsoft Windows 特别有用，因为它没有 <span class="APPLICATION">kill</span> 命令。使用 <tt class="LITERAL">--help</tt> 查看支持的信号名字列表。</p>
<p><tt class="OPTION">register</tt> 模式允许你在 Microsoft Windows 上注册一个系统服务。</p>
<p><tt class="OPTION">unregister</tt> 模式允许你在 Microsoft Windows 上删除先前用 <tt class="OPTION">register</tt> 命令注册的系统服务。</p>
</div>
<div class="REFSECT1"><a name="APP-PG-CTL-OPTIONS"></a><h2>选项</h2>
<div class="VARIABLELIST">
<dl>
<dt><tt class="OPTION">-D <tt class="REPLACEABLE"><i>datadir</i></tt></tt></dt>
<dd><p>声明该数据库的文件系统位置。如果忽略则使用 <tt class="ENVAR">PGDATA</tt> 环境变量。</p></dd>
<dt><tt class="OPTION">-l <tt class="REPLACEABLE"><i>filename</i></tt></tt></dt>
<dd><p>把服务器日志输出附加在 <tt class="REPLACEABLE"><i>filename</i></tt> 文件上。如果该文件不存在则创建它。<span class="SYSTEMITEM">umask</span> 设置为 077 ，因此缺省时是不允许从其它用户向日志文件访问的。</p></dd>
<dt><tt class="OPTION">-m <tt class="REPLACEABLE"><i>mode</i></tt></tt></dt>
<dd><p>声明关闭模式。<tt class="REPLACEABLE"><i>mode</i></tt> 可以是 <tt class="LITERAL">smart</tt>, <tt class="LITERAL">fast</tt>, <tt class="LITERAL">immediate</tt> 之一，或者是这三个的首字母之一。</p></dd>
<dt><tt class="OPTION">-o <tt class="REPLACEABLE"><i>options</i></tt></tt></dt>
<dd><p>声明要直接传递给 <tt class="COMMAND">postgres</tt> 的选项。</p>
<p>参数通常都用单或者双引号包围以保证它们作为一个整体传递。</p></dd>
<dt><tt class="OPTION">-p <tt class="REPLACEABLE"><i>path</i></tt></tt></dt>
<dd><p>声明 <tt class="FILENAME">postgres</tt> 可执行文件的位置。缺省位于 <tt class="COMMAND">pg_ctl</tt> 自身所在目录，如果没找到则使用硬编码的安装目录。除非你想干点什么特别的事情，并且想得到类似没有找到 <tt class="FILENAME">postgres</tt> 这样的错误，否则必须使用这个选项。</p></dd>
<dt><tt class="OPTION">-s</tt></dt>
<dd><p>只打印错误，而不打印提示性信息。</p></dd>
<dt><tt class="OPTION">-w</tt></dt>
<dd><p>等待启动或者关闭的完成(60 秒超时)，这个参数是关闭时的缺省值。成功的关闭是以删除 PID 文件为标志的。对于启动而言，一次成功的 <tt class="COMMAND">psql -l</tt> 就标志着成功。<tt class="COMMAND">pg_ctl</tt> 将企图使用对 <span class="APPLICATION">psql</span> 合适的端口，如果存在 <tt class="ENVAR">PGPORT</tt> 环境变量，那么将用它。否则，它将查找在 <tt class="FILENAME">postgresql.conf</tt> 文件里是否设置了一个端口。如果都没有，它将使用 PostgreSQL 编译时的缺省端口(缺省 5432)。在等待的时候，<tt class="COMMAND">pg_ctl</tt> 将根据启动或者关闭的成功状况返回一个准确的退出代码。</p></dd>
<dt><tt class="OPTION">-W</tt></dt>
<dd><p>不等待启动或者停止的完成。这是启动和重启的缺省。</p></dd>
</dl>
</div>
<div class="REFSECT2"><a name="APP-PG-CTL-WINDOWS-OPTIONS"></a><h3>Windows 选项</h3>
<div class="VARIABLELIST">
<dl>
<dt><tt class="OPTION">-N <tt class="REPLACEABLE"><i>servicename</i></tt></tt></dt>
<dd><p>要注册的系统服务的名字。这个名字将用于服务名和显示名。</p></dd>
<dt><tt class="OPTION">-P <tt class="REPLACEABLE"><i>password</i></tt></tt></dt>
<dd><p>用户启动服务的口令</p></dd>
<dt><tt class="OPTION">-U <tt class="REPLACEABLE"><i>username</i></tt></tt></dt>
<dd><p>用于启动服务的用户的用户名。对于域用户，使用 <tt class="LITERAL">DOMAIN\username</tt> 格式。</p></dd>
</dl>
</div>
</div>
</div>
<div class="REFSECT1"><a name="AEN60677"></a><h2>环境变量</h2>
<div class="VARIABLELIST">
<dl>
<dt><tt class="ENVAR">PGDATA</tt></dt>
<dd><p>缺省数据目录位置</p></dd>
<dt><tt class="ENVAR">PGPORT</tt></dt>
<dd><p><a href="app-psql.html"><span class="APPLICATION">psql</span></a> 的缺省端口(由 -w 选项使用)。</p></dd>
</dl>
</div>
<p>其它的环境变量请参阅 <a href="app-postgres.html"><span class="APPLICATION">postgres</span></a></p>
</div>
<div class="REFSECT1"><a name="AEN60693"></a><h2>文件</h2>
<div class="VARIABLELIST">
<dl>
<dt><tt class="FILENAME">postmaster.pid</tt></dt>
<dd><p>这个文件存在于数据目录中是为了帮助 <span class="APPLICATION">pg_ctl</span> 判断服务器当前是否在运行。</p></dd>
<dt><tt class="FILENAME">postmaster.opts.default</tt></dt>
<dd><p>如果这个文件存在于数据目录，<span class="APPLICATION">pg_ctl</span> (在 <tt class="OPTION">start</tt> 模式下)将把文件地内容当作传递给 <tt class="COMMAND">postgres</tt> 命令的选项传递过去，除非被 <tt class="OPTION">-o</tt> 选项覆盖。</p></dd>
<dt><tt class="FILENAME">postmaster.opts</tt></dt>
<dd><p>如果这个文件存在于数据目录，<span class="APPLICATION">pg_ctl</span> (在 <tt class="OPTION">start</tt> 模式下)将把文件地内容当作传递给 <tt class="COMMAND">postgres</tt> 命令的选项传递过去，除非被 <tt class="OPTION">-o</tt> 选项覆盖。这个文件的内容也会在 <tt class="OPTION">status</tt> 模式里显示出来。</p></dd>
<dt><tt class="FILENAME">postgresql.conf</tt></dt>
<dd><p>这个文件在数据目录中，会分析它以查找和 <span class="APPLICATION">psql</span> 一起用的合适的端口(在 <tt class="OPTION">start</tt> 模式里给出 <tt class="OPTION">-w</tt> 的时候)。</p></dd>
</dl>
</div>
</div>
<div class="REFSECT1"><a name="AEN60729"></a><h2>注意</h2>
<p>等待完全启动还不是一个定义得很完整的操作，如果访问控制设置为本地客户端在没有手工交互的情况下不能访问的话还可能会失效(比如口令认证)。</p>
</div>
<div class="REFSECT1"><a name="R1-APP-PGCTL-2"></a><h2>例子</h2>
<div class="REFSECT2"><a name="R2-APP-PGCTL-3"></a><h3>启动服务器</h3>
<p>启动服务器：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl start</kbd></pre>
<p>启动服务器的一个例子，等到服务器启动了才退出：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl -w start</kbd></pre>
<p>服务器使用 5433 端口，而且不带 <code class="FUNCTION">fsync</code> 运行，使用：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl -o "-F -p 5433" start</kbd></pre>
</div>
<div class="REFSECT2"><a name="R2-APP-PGCTL-4"></a><h3>停止服务器</h3>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl stop</kbd></pre>
<p>使用 <tt class="OPTION">-m</tt> 选项停止服务器允许用户控制<span class="emphasis"><i class="EMPHASIS">如何</i></span>关闭后端。</p>
</div>
<div class="REFSECT2"><a name="R2-APP-PGCTL-5"></a><h3>重启服务器</h3>
<p>这个命令几乎等于先停止服务器然后再启动它，只不过 <tt class="COMMAND">pg_ctl</tt> 保存并重新使用上一次运行服务器的命令行参数。重启服务器的最简单的方法是：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl restart</kbd></pre>
<p>重启服务器，等待其停止和重启：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl -w restart</kbd></pre>
<p>使用 5433 端口重启并且重启后关闭 <code class="FUNCTION">fsync</code> ：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl -o "-F -p 5433" restart</kbd></pre>
</div>
<div class="REFSECT2"><a name="R2-APP-PGCTL-6"></a><h3>显示服务器状态</h3>
<p>下面是来自 <span class="APPLICATION">pg_ctl</span> 的状态输出的例子：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">pg_ctl status</kbd>
<samp class="COMPUTEROUTPUT">pg_ctl: server is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'</samp></pre>
<p>这就是在 restart 模式中被调用的命令行。</p>
</div>
</div>
<div class="REFSECT1"><a name="AEN60781"></a><h2>又见</h2>
<p><a href="app-postgres.html"><span class="APPLICATION">postgres</span></a></p>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="app-pgcontroldata.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="app-pgresetxlog.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top"><span class="APPLICATION">pg_controldata</span></td><td width="34%" align="center" valign="top"><a href="reference-server.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top"><span class="APPLICATION">pg_resetxlog</span></td></tr>
</table>
</div>
</body></html>